package com.atguigu.tingshu.user.api;

import com.atguigu.tingshu.common.login.TsLogin;
import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.common.util.AuthContextHolder;
import com.atguigu.tingshu.model.user.UserInfo;
import com.atguigu.tingshu.user.service.UserInfoService;
import com.atguigu.tingshu.vo.user.UserInfoVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;

@Tag(name = "微信授权登录接口")
@RestController
@RequestMapping("/api/user/wxLogin")
@Slf4j
public class WxLoginApiController {

    @Autowired
    private UserInfoService userInfoService;
    @Operation(summary = "小程序登录授权")
    @GetMapping("/wxLogin/{code}")
    public Result wxLogin(@PathVariable String code) {
        HashMap<String, Object> map = userInfoService.wxLogin(code);
        return Result.ok(map);
    }
//    http://127.0.0.1/api/user/wxLogin/getUserInfo
    @TsLogin
    @Operation(summary = "登录获取用户信息")
    @GetMapping("/getUserInfo")
    public Result getUserIinfo(){
//        从线程中获取用户id
        Long userId = AuthContextHolder.getUserId();
        UserInfoVo userInfoVo =  userInfoService.getUserIinfo(userId);
        return Result.ok(userInfoVo);
    }
//    更新用户信息
    @TsLogin
    @Operation(summary = "更新用户信息")
    @PostMapping("/updateUser")
    public Result updateUser(@RequestBody UserInfoVo userInfoVo){
//        从线程中获取用户id
        Long userId = AuthContextHolder.getUserId();
//        给userInfo赋值
        userInfoVo.setId(userId);
        userInfoService.updateUser(userInfoVo);
        return Result.ok();
    }
    /**
     * 登录获取用户信息
     *
     * 根据用户ID获取用户详细信息此方法用于处理HTTP GET请求，提供用户信息的查询服务
     *
     * @param userId 用户ID，用于指定需要获取信息的用户
     * @return 包含用户信息的Result对象
     */
    @Operation(summary = "远程调用获取用户信息")
    @GetMapping("/getUserInfoVo/{userId}")
    public Result getUserInfoVo(@PathVariable Long userId){
        // 通过用户ID从数据库中获取用户信息
        UserInfo userInfo = userInfoService.getById(userId);

        // 创建一个UserInfoVo对象，用于存储转换后的用户信息
        UserInfoVo userInfoVo = new UserInfoVo();

        // 使用Spring的Bean工具将UserInfo对象的属性值复制到UserInfoVo对象中
        BeanUtils.copyProperties(userInfo,userInfoVo);

        // 返回包含用户信息的Result对象，表示操作成功
        return Result.ok(userInfoVo);
    }
}
